perm filename BOWLS.SAI[ALS,ALS] blob
sn#261612 filedate 1977-02-03 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "BOWLS"
C00007 00003 MKROOM INSERT FULL DELETE ADD CORRECT NICK REPORT UPDATE GAME TEAMS NLIST GLIST LIKELY
C00024 00004 $ MAIN PROGRAM STARTS HERE
C00026 ENDMK
C⊗;
BEGIN "BOWLS"
DEFINE ⊂="BEGIN",⊃="END",$="COMMENT";
DEFINE SIZE="24",BSIZE="1024";
DEFINE \=" "; $ DEFINE \="SAFE"; $ Simple way to change to SAFE;
INTEGER ARRAY BUF,BUF2[0:1023],NDATA,RDATA[0:32],DATA[0:32];
INTEGER H,I,J,K,L,M,MM,N,P,Q,QQ,LENX,LENB,SIDEOF,BRCHR,CHAN1,CHAN2,EOF,SIDE,TSIZE,DELTA2;
SHORT REAL SCORE,RATING,DELTA;
STRING READ1,READ2,READ3,READ4,READ5,READX,READA,READW,READB,READN,READP,READC,READD,READY;
BOOLEAN ER;
LABEL MAIN1,MAIN2;
PROCEDURE HELP;
⊂ OUTSTR('11&"The Bowling on the Green Report"&'15&'12);
OUTSTR ("
Services are: 0. Exit. 1. Add game. 2. Add name.
3. Corection. 4. Ratings. 5. List names. 6. List games.
7. Suggestions. 8. Help me. 9. Delete name from list.
After you have typed a number to designate the type of service
required, you will be asked a series of questions. A carriage return
should terminate your answer. A carriage return only will terminate
most queries and go on to the next item, the exception being when you
are asked to verify a proposed entry. In thes case your answer should
be a Y or a N followed by a carriage return.
");
⊃ ;
PROCEDURE GET; $ Get nickname and convert to caps.;
⊂ LABEL GET1;
GET1: OUTSTR ('11&"Nickname = "); READX←INCHWL;
LENX←LENGTH(READX); IF LENX>6 THEN LENX←6;
J←CVSIX(READX); READX←CVXSTR(J)[1 FOR LENX];
⊃ ;
PROCEDURE STRIP; $ Strip trailing spaces;
⊂ FOR Q←6 STEP -1 UNTIL 1 DO IF READB[Q FOR 1]≠" " THEN DONE;
READB←READB[1 FOR Q]; QQ←QQ+Q;
⊃ ;
PROCEDURE ASK; $ Ask for confirmation showing full name;
⊂ LABEL ASK1;
ASK1: OUTSTR ('11&"Do you mean "&CVXSTR(BUF[I]));
OUTSTR(" i.e. ");
FOR K←2 STEP 1 UNTIL 5 DO OUTSTR(CVSTR(BUF[I+K])); OUTSTR("?"&'11);
READY←(INCHWL)[1 for 1];
IF EQU(READY,"Y")∨EQU(READY,"y") THEN J←I ELSE
⊂ J←I+SIZE; OUTSTR ("Ambiguous! "); ⊃ ;
⊃ ;
PROCEDURE FIND; $ Find nickname in list;
$ J<I not found, J=I found, J>I ambiguous.;
⊂
LABEL FIND1,FIND2,FIND3,FIND4;
FOR I←0 STEP SIZE UNTIL 1008 DO
⊂ "ILOOP"
FIND1: IF BUF[I]=0 THEN ⊂ J←I-SIZE; DONE; ⊃ ELSE
READB←CVXSTR(BUF[I]); READ1←READX;
STRIP;
FOR K←1 STEP 1 UNTIL 6 DO
⊂ L←LOP(READ1); M←LOP(READB); IF (L≠M)∨(L=0)∨(M=0) THEN DONE; ⊃ ;
FIND2: IF L=M THEN ⊂ J←I; DONE; ⊃ ;
FIND3: IF M=0 THEN ⊂ ASK; DONE; ⊃ ;
IF L=0 THEN
⊂ READ1←READX; READB←CVXSTR(BUF[I+SIZE]);
STRIP;
FOR N←1 STEP 1 UNTIL K DO
⊂ L←LOP(READ1); M←LOP(READB); IF (L≠M)∨(L=0)∨(M=0) THEN DONE; ⊃ ;
IF (L≠M)∧(L≠0) THEN ⊂ J←I; DONE "ILOOP"; ⊃
ELSE ⊂ J←I+SIZE; DONE "ILOOP"; ⊃ ;
⊃ ;
FIND4: IF L<M THEN ⊂ J←I-SIZE; DONE; ⊃ ;
⊃ ;
⊃ ;
COMMENT MKROOM INSERT FULL DELETE ADD CORRECT NICK REPORT UPDATE GAME TEAMS NLIST GLIST LIKELY;
PROCEDURE MKROOM;
⊂
LABEL MKRO1;
MKRO1: IF BUF[I]≠0 THEN
⊂ FOR K←I STEP SIZE UNTIL 1008 DO IF BUF[K]=0 THEN DONE;
IF K≥1008 THEN OUTSTR("Too many players! ") ELSE
⊂ FOR K←K-1 STEP -1 UNTIL I DO BUF[K+SIZE]←BUF[K];
FOR K←I+SIZE-1 STEP -1 UNTIL I DO BUF[K]←0;
⊃ ;
⊃ ;
⊃ ;
PROCEDURE INSERT; $ To add new name to list;
⊂
LABEL INSER1;
INSER1: BUF[I]←CVSIX(READX);
⊃ ;
PROCEDURE FULL;
⊂ OUTSTR('11&"Type full name for record "); READ3←INCHWL; J←1;
READ3←READ3&" "; $ Pad it out by 12 blanks;
FOR K←2 STEP 1 UNTIL 5 DO ⊂ BUF[I+K]←CVASC(READ3[J FOR 5]); J←J+5; ⊃ ;
BUF[I+6]←0; BUF[I+7]←10000;
⊃ ;
PROCEDURE DELETE; $ Delete name from list;
⊂ GET;
FIND;
IF I≠J THEN OUTSTR("Not found"&'15&'12) ELSE
⊂ OUTSTR("Do you really want to delete "&CVXSTR(BUF[I]));
OUTSTR('11);
FOR J←4 STEP 1 UNTIL 7 DO OUTSTR(CVSTR(BUF[I+J]));
OUTSTR("? ");
READY←(INCHWL)[1 for 1];
IF EQU(READY,"Y")∨EQU(READY,"y") THEN
FOR J←I STEP 1 UNTIL 999 DO
BUF[J]←BUF[J+SIZE];
⊃ ;
⊃ ;
PROCEDURE ADD;
⊂ "ADD" $ Returns index in I for location of nickname;
WHILE TRUE DO
⊂ "TLOOP"
GET;
IF LENX=0 THEN DONE "TLOOP";
FIND;
IF I>J THEN ⊂ MKROOM; INSERT; FULL; ⊃ ;
IF I=J THEN OUTSTR ("This nickname has already been used"&'15&'12);
⊃ "TLOOP";
⊃ "ADD";
PROCEDURE CORRECT;
⊂ "CORRECT"
WHILE TRUE DO
⊂ "TLOOP"
OUTSTR("Type old ");
GET;
IF LENX=0 THEN DONE "TLOOP";
FIND;
IF J≠I THEN ⊂ OUTSTR("Ambiguous, try again."&'15&'12); CONTINUE; ⊃ ELSE
⊂ OUTSTR (" for ");
FOR K←2 STEP 1 UNTIL 5 DO OUTSTR(CVSTR(BUF[I+K]));
OUTSTR ('15&'12&"CR or corrected nickname ");
GET;
IF LENX≠0 THEN INSERT;
OUTSTR("CR or correct full name ");
READ3←INCHWL;
IF ¬EQU(READ3,"") THEN
⊂ READ3←READ3&" "; $ Pad it out by 12 blanks;
FOR K←2 STEP 1 UNTIL 5 DO ⊂ BUF[I+K]←CVASC(READ3[J FOR 5]); J←J+5; ⊃ ;
⊃ ;
OUTSTR("Has played "&CVS(BUF[I+6])); OUTSTR(" games. CR or correct ");
READ2←INCHWL; IF LENGTH(READ2)≠0 THEN BUF[I+6]←CVD(READ2);
RATING←BUF[I+7]; RATING←RATING/100-100;
OUTSTR("With a rating of "&CVF(RATING)&" CR or correct ");
READ4←INCHWL; IF (LENGTH(READ4))>0 THEN
⊂ READX←""; READP←"."; READC←",";
FOR K←1 STEP 1 UNTIL 3 DO
⊂ READ5←LOP(READ4); IF EQU(READ5,READP)∨EQU(READ5,READC) THEN DONE;
READX←READX&READ5;
⊃ ;
IF EQU(READ5,READC) THEN READX←READX&"00" ELSE
⊂ READX←READX&READ5;
READ4←LOP(READ3);
IF EQU(READ4,READC) THEN READ4←"0";
READX←READX&READ4;
⊃ ;
BUF[I+7]←CVD(READX);
⊃ ;
⊃ ;
⊃ "TLOOP";
⊃ "CORRECT";
PROCEDURE NICK;
⊂ READ1←READ2←READ3←"";
IF I≥SIZE THEN FOR J←2 STEP 1 UNTIL 5 DO READ1←READ1&CVSTR(BUF[I-SIZE+J]);
FOR J←2 STEP 1 UNTIL 5 DO READ2←READ2&CVSTR(BUF[I+J]);
IF ¬ EQU(BUF[I+SIZE+2],"") THEN
FOR J←2 STEP 1 UNTIL 5 DO READ3←READ3&CVSTR(BUF[I+SIZE+J]);
FOR K←1 STEP 1 UNTIL 20 DO
⊂ L←LOP(READ1); M←LOP(READ2); N←LOP(READ3);
⊃ ;
⊃ ;
PROCEDURE REPORT;
⊂ "REPORT"
LABEL REP1,REP2,REP3,REP4;
I←J←0; NDATA[J]←I; RDATA[J]←BUF[I+7];
OUTSTR('15&'12&
"Rating Nickn. Played on With Against With earlier"&'15&'12);
REP1: FOR I←SIZE STEP SIZE UNTIL 1008 DO
⊂ IF BUF[I]=0 THEN DONE; L←I%SIZE;
NDATA[L]←I; RDATA[L]←BUF[I+7];
REP2: FOR J←L STEP -1 UNTIL 1 DO
⊂ IF RDATA[J]≤RDATA[J-1] THEN DONE;
REP3: K←NDATA[J]; NDATA[J]←NDATA[J-1]; NDATA[J-1]←K;
K←RDATA[J]; RDATA[J]←RDATA[J-1]; RDATA[J-1]←K;
⊃ ;
⊃ ;
REP4: FOR K←0 STEP 1 UNTIL L DO
⊂ I←NDATA[K]; IF BUF[I]=0 THEN DONE;
RATING←BUF[I+7]; RATING←(RATING/100)-100;
OUTSTR('15&'12&CVF(RATING));
OUTSTR('11&CVXSTR(BUF[I]));
OUTSTR('11);
OUTSTR(CVXSTR(BUF[I+18]));
OUTSTR('11); QQ←0;
FOR J←8 STEP 1 UNTIL 11 DO
⊂ READB←CVXSTR(BUF[I+J]);
STRIP;
OUTSTR(READB[1 FOR Q]);
IF BUF[I+J+1]=0 THEN DONE; OUTSTR(","); QQ←QQ+1;
⊃ ;
FOR Q←QQ STEP 1 UNTIL 11 DO OUTSTR(" "); OUTSTR(" "); QQ←0;
FOR J←12 STEP 1 UNTIL 17 DO
⊂ READB←CVXSTR(BUF[I+J]);
STRIP;
OUTSTR(READB[1 FOR Q]);
IF BUF[I+J+1]=0 THEN DONE; OUTSTR(","); QQ←QQ+1;
⊃ ;
FOR Q←QQ STEP 1 UNTIL 17 DO OUTSTR(" "); OUTSTR(" ");
FOR J←20 STEP 1 UNTIL 23 DO
⊂ READB←CVXSTR(BUF[I+J]);
STRIP;
OUTSTR(READB[1 FOR Q]);
IF BUF[I+J+1]=0 THEN DONE; OUTSTR(",");
⊃ ;
⊃ ;
OUTSTR('15&'12&'12&'12);
⊃ "REPORT";
PROCEDURE UPDATE;
⊂
WHILE TRUE DO
⊂ GET;
FIND;
IF I>J THEN
⊂ OUTSTR('11&"Is this a new name to add? ");
READY←(INCHWL)[1 for 1];
IF EQU(READY,"Y")∨EQU(READY,"y") THEN
⊂ MKROOM; INSERT; FULL; J←I; ⊃ ;
⊃ ;
IF I=J THEN
⊂ K←BUF[I+6]; L←BUF[I+7]; RATING←L; RATING←RATING/100-100;
OUTSTR (CVSTR(BUF[I+2])&CVSTR(BUF[I+3])&CVSTR(BUF[I+4])&CVSTR(BUF[I+5]));
SETFORMAT(1,0);
OUTSTR (" Game "&CVS(K+1));
SETFORMAT(3,2);
OUTSTR(" Rating was "&CVF(RATING));
RATING←((RATING*3)+DELTA)/4;
OUTSTR (" changed to "&CVF(RATING)&'15&'12);
RATING←(RATING+100)*100; L←RATING;
OUTSTR("Is this OK?"&'11);
READY←(INCHWL)[1 FOR 1];
IF EQU(READY,"Y")∨EQU(READY,"y") THEN
⊂ BUF[I+6]←BUF[I+6]+1; BUF[I+7]←L;
DATA[P]←BUF[I]; P←P+1;
DONE;
⊃ ELSE OUTSTR ("Sorry, try again ");
⊃ ;
⊃ ;
⊃ ;
PROCEDURE GAME;
⊂ "GAME"
INTEGER HH,JJ,JJJ;
LABEL GA0,GA1,GA2,GA3,GA4,GA5,GA6;
SETFORMAT(5,3);
OUTSTR('15&'12&'11&"Type date of game = ");
READD←INCHWL;
WHILE TRUE DO
⊂ OUTSTR('11&"Type score difference = ");
IF LENGTH((READ1←INCHWL))=0 THEN DONE;
DELTA2←DELTA←CVD(READ1);
OUTSTR('11&"Type number on each side = ");
SIDE←CVD(INCHWL);
DELTA←DELTA/SIDE;
OUTSTR('11&'11&"List winners by nickname"&'15&'12);
P←0;
GA0: FOR JJJ←1 STEP 1 UNTIL SIDE DO UPDATE;
DELTA←0-DELTA;
OUTSTR('15&'12&'11&'11&"Now list losers by nickname"&'15&'12);
FOR JJJ←1 STEP 1 UNTIL SIDE DO UPDATE;
$ Add to list of teams, testing cell containing SIDE for empty slot;
FOR J←2 STEP 12 UNTIL 1010 DO IF BUF2[J]=0 THEN DONE;
IF J>1010 THEN
⊂ FOR J←0 STEP 1 UNTIL 1007 DO BUF2[J]←BUF2[J+12];
FOR J←1008 STEP 1 UNTIL 1023 DO BUF2[J]←0;
J←1008;
⊃ ELSE J←J-2;
BUF2[J]←CVSIX(READD); BUF2[J+2]←SIDE; BUF2[J+3]←DELTA2;
FOR K←0 STEP 1 UNTIL 7 DO BUF2[J+K+4]←DATA[K];
$ Now make lists of team-mates and opponents;
HH←(SIDE*2)-1; JJ←SIDE-1;
GA1: FOR H←0 STEP 1 UNTIL HH DO
⊂ READB←CVXSTR(DATA[H]);
STRIP;
READX←READB;
FIND;
GA2: FOR L←8 STEP 1 UNTIL 11 DO BUF[I+L+12]←BUF[I+L];
FOR L←8 STEP 1 UNTIL 17 DO BUF[I+L]←0;
L←8; M←12;
GA3: FOR J←0 STEP 1 UNTIL HH DO
⊂ IF ((H≤JJ)∧(J≤JJ))∨((H>JJ)∧(J>JJ)) THEN
⊂ IF J≠H THEN ⊂ BUF[I+L]←DATA[J]; L←L+1; ⊃ ;
⊃ ELSE
⊂ BUF[I+M]←DATA[J]; M←M+1;
⊃ ;
⊃ ;
GA4: WHILE L≤11 DO ⊂ BUF[I+L]←0; L←L+1; ⊃ ;
WHILE M≤17 DO ⊂ BUF[I+M]←0; M←M+1; ⊃ ;
BUF[I+18]←CVSIX(READD);
⊃ ;
OUTSTR('11&"Game has been recorded. Next game please."&'15&'12&'12);
⊃ ;
⊃ "GAME";
PROCEDURE TEAMS;
⊂ INTEGER JJ;
OUTSTR('15&'12&"Date Delta Winning team Losing team"&'15&'12);
FOR J←2 STEP 12 UNTIL 1008 DO IF BUF2[J]=0 THEN DONE;
IF J<14 THEN J←14;
FOR J←J-14 STEP -12 UNTIL 0 DO
⊂ OUTSTR('15&'12);
OUTSTR(CVXSTR(BUF2[J]));
SIDE←BUF2[J+2]; JJ←SIDE-1;
OUTSTR('11&CVS(BUF2[J+3]));
OUTSTR('11);
QQ←0;
FOR K←0 STEP 1 UNTIL JJ DO
⊂ READB←CVXSTR(BUF2[J+4+K]);
STRIP; OUTSTR(READB);
IF BUF2[J+5+K]=0 THEN DONE; OUTSTR(","); QQ←QQ+1;
⊃ ;
FOR Q←QQ STEP 1 UNTIL 20 DO OUTSTR(" "); OUTSTR(" ");
FOR K←SIDE STEP 1 UNTIL 7 DO
⊂ READB←CVXSTR(BUF2[J+4+K]);
STRIP; OUTSTR(READB);
IF BUF2[J+5+K]=0 THEN DONE; OUTSTR(","); QQ←QQ+1;
⊃ ;
⊃ ;
OUTSTR('15&'12&'12);
⊃ ;
PROCEDURE NLIST;
⊂ "NLIST"
OUTSTR("Nickn. Games Rating Name"&'15&'12);
FOR I←0 STEP SIZE UNTIL 1000 DO
⊂ IF BUF[I]=0 THEN DONE;
OUTSTR('15&'12);
RATING←BUF[I+7]; RATING←RATING/100-100;
OUTSTR(CVXSTR(BUF[I]));
SETFORMAT(3,0);
OUTSTR('11&CVS(BUF[I+6]));
SETFORMAT(5,2);
OUTSTR('11&CVF(RATING)); OUTSTR('11);
FOR K←2 STEP 1 UNTIL 5 DO OUTSTR(CVSTR(BUF[I+K]));
⊃ ;
OUTSTR('15&'12&'12&'12);
⊃ "NLIST";
PROCEDURE GLIST;
⊂ "GLIST"
⊃ "GLIST";
PROCEDURE LIKELY;
⊂ INTEGER II,JJ,KK,LL;
INTEGER ARRAY DATA2[0:64];
LABEL LI1,LI2,LI3;
OUTSTR('12&'12&'11&'11&"Bowling on the Green"&'15&'12&'12);
OUTSTR("Name Likely suggestions for people to play");
FOR I←0 STEP SIZE UNTIL BSIZE DO
⊂ "ILOOP" $ Consider each person on the list;
IF BUF[I]=0 THEN DONE;
FOR II←0 STEP SIZE UNTIL BSIZE DO
⊂ "IILOOP" $ Make up 2 lists of the other players;
IF BUF[II]=0 THEN DONE;
J←II%SIZE; IF I≠II THEN DATA[J]←DATA2[J]←BUF[II] ELSE DATA[J]←DATA2[J]←0;
⊃ "IILOOP";
LI1: JJ←J; $ JJ contains the total number of players;
FOR J←2 STEP 12 UNTIL BSIZE DO IF BUF2[J]=0 THEN DONE;
$ Now start with the most recent game;
OUTSTR('15&'12);
FOR J←J-12 STEP -12 UNTIL 2 DO
⊂ "JLOOP" $ Consider the games one at a time, backwards;
SIDE←BUF2[J];
IF SIDE=0 THEN CONTINUE; $ There is an error somewhere;
$ Check winning sides;
FOR K←1 STEP 1 UNTIL SIDE DO
⊂ "KWLOOP"
LI2: IF BUF2[J+K+1]≠BUF[I] THEN CONTINUE ELSE
$ for team-mates;
⊂ FOR LL←1 STEP 1 UNTIL SIDE DO
⊂ IF BUF2[J+LL+1]=0 THEN DONE;
FOR L←0 STEP 1 UNTIL JJ DO IF DATA[L]=BUF2[J+LL+1] THEN
⊂ DATA[L]←0; DONE; ⊃ ;
⊃ ;
$ and for opponents;
FOR LL←SIDE+1 STEP 1 UNTIL SIDE*2 DO
⊂ IF BUF2[J+LL+1]=0 THEN DONE;
FOR L←0 STEP 1 UNTIL JJ DO IF DATA2[L]=BUF2[J+LL+1] THEN
⊂ DATA2[L]←0; DONE; ⊃ ;
⊃ ;
⊃ ;
⊃ "KWLOOP";
$ Check losing sides;
FOR K←SIDE+1 STEP 1 UNTIL SIDE*2 DO
⊂ "KLLOOP"
LI3: IF BUF2[J+K+1]≠BUF[I] THEN CONTINUE ELSE
$ for team-mates;
⊂ FOR LL←SIDE+1 STEP 1 UNTIL SIDE*2 DO
⊂ IF BUF2[J+LL+1]=0 THEN DONE;
FOR L←0 STEP 1 UNTIL JJ DO IF DATA[L]=BUF2[J+LL+1] THEN
⊂ DATA[L]←0; DONE; ⊃
⊃ ;
$ and for opponents;
FOR LL←1 STEP 1 UNTIL SIDE DO
⊂ IF BUF2[J+LL+1]=0 THEN DONE;
FOR L←0 STEP 1 UNTIL JJ DO IF DATA2[L]=BUF2[J+LL+1] THEN
⊂ DATA2[L]←0; DONE; ⊃
⊃ ;
⊃ ;
⊃ "KLLOOP";
⊃ "JLOOP";
OUTSTR('15&'12&CVXSTR(BUF[I]));
OUTSTR('15&'12&"With ");
KK←0;
FOR L←0 STEP 1 UNTIL JJ DO
⊂ IF KK≥9 THEN ⊂ OUTSTR('15&'12&'11); KK←0; ⊃;
IF DATA[L]≠0 THEN
⊂ OUTSTR(CVXSTR(DATA[L])); OUTSTR(" "); KK←KK+1; ⊃ ;
⊃ ;
OUTSTR('15&'12&"Against ");
KK←0;
FOR L←0 STEP 1 UNTIL JJ DO
⊂ IF KK≥9 THEN ⊂ OUTSTR('15&'12&'11); KK←0; ⊃;
IF DATA2[L]≠0 THEN
⊂ OUTSTR(CVXSTR(DATA2[L])); OUTSTR(" "); KK←KK+1; ⊃ ;
⊃ ;
⊃ "ILOOP";
OUTSTR('15&'12&'12);
⊃ ;
$ MAIN PROGRAM STARTS HERE;
CHAN1←1; CHAN2←2;
CLOSE (CHAN1); OPEN (CHAN1,"DSK",'10,2,0,0,0,EOF);
LOOKUP (CHAN1,"BOWLS.DAT[ALS,ALS]",ER);
IF ER THEN OUTSTR ("BOWLS.DAT does not exist."&'15&'12) ELSE
⊂ ARRYIN(CHAN1,BUF[0],BSIZE); ARRYIN(CHAN1,BUF2[0],BSIZE); ⊃;
CLOSE(CHAN1);
READP←"."; READC←'15;
$ Main program loop starts here;
OUTSTR ("
Services are: 0. Exit. 1. Add game. 2. Add name.
3. Corection. 4. Ratings. 5. List names. 6. List games.
7. Suggestions 8. Help me. 8. Delete name.
");
MAIN1: WHILE TRUE DO
⊂ OUTSTR('15&'12&"Type number for service (8 for help) = ");
SETFORMAT (5,2);
I←CVD(INCHWL);
IF (I>9)∨(I≤0) THEN DONE;
CASE I OF ⊂ ;GAME;ADD;CORRECT;REPORT;NLIST;TEAMS;LIKELY;HELP;DELETE ⊃ ;
⊃ ;
MAIN2: CLOSE (CHAN2); OPEN (CHAN2,"DSK",'10,0,2,0,0,EOF);
ENTER (CHAN2,"BOWLS.DAT[ALS,ALS]",ER);
ARRYOUT (CHAN2,BUF[0],BSIZE);
ARRYOUT (CHAN2,BUF2[0],BSIZE); CLOSE(CHAN2); RELEASE(CHAN2);
⊃ "BOWLS";